/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Controllers;

import Entities.BasisReis;
import Entities.Betaalwijze;
import Entities.Boeking;
import Entities.Klant;
import Entities.Land;
import Entities.Vervoersmiddel;
import Entities.VervoersmiddelType;
import Interfaces.BoekingInterface;
import Interfaces.InloggenInterface;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import java.util.Map;
import javax.enterprise.context.RequestScoped;
import javax.faces.context.FacesContext;
import javax.inject.Inject;
import javax.inject.Named;

/**
 *
 * @author Andy
 */
@Named
@RequestScoped
public class ControllerFactuur implements Serializable {

    Date datumVanVandaag = new Date();
    VervoersmiddelType vervoersmiddeltype;
    Land vertrekplaats;
    Land Bestemming;
    Date vertrekdatum;
    Date einddatum;
    int aantalPersonen;
    int basisReisID;
    private String wachtwoord;
    private BasisReis sessieBasisReis;
    private List<Vervoersmiddel> sessievervoersmiddelen;
    private ControllerInloggen controllerInloggen;
    @Inject
    InloggenInterface inloggenInterface;
    @Inject
    BoekingInterface boekingInterface;
    private int sessieAantalPersonen;
    private Betaalwijze betaalwijze;
    
    

    public ControllerFactuur() {
        controllerInloggen = new ControllerInloggen();
        betaalwijze = new Betaalwijze();
    }
    
    public Betaalwijze getBetaalwijze() {
        return betaalwijze;
    }

    public void setBetaalwijze(Betaalwijze betaalwijze) {
        this.betaalwijze = betaalwijze;
    }

    public BasisReis getSessieBasisReisId() {

        FacesContext context = FacesContext.getCurrentInstance();

        if (context != null) {
            Map<String, Object> sessionMap = context.getExternalContext().getSessionMap();
            if (sessionMap != null) {
                sessieBasisReis = (BasisReis) sessionMap.get("basisReis");
            }

        }


        return sessieBasisReis;

    }

    public List<Vervoersmiddel> getSessieVervoersmiddelen() {

        FacesContext context = FacesContext.getCurrentInstance();

        if (context != null) {
            Map<String, Object> sessionMap = context.getExternalContext().getSessionMap();
            if (sessionMap != null) {
                sessievervoersmiddelen = (List<Vervoersmiddel>) sessionMap.get("vervoersmiddelen");
            }
        }
        return sessievervoersmiddelen;
    }
    
        public int getSessieAantalPersonen() {

        FacesContext context = FacesContext.getCurrentInstance();

        if (context != null) {
            Map<String, Object> sessionMap = context.getExternalContext().getSessionMap();
            if (sessionMap != null) {
                sessieAantalPersonen = Integer.parseInt( sessionMap.get("aantalpersonen").toString());
            }
        }
        return sessieAantalPersonen;
    }

    public String bevestigen() {

        Klant klant = new Klant();
        klant.setEmail(controllerInloggen.getSessieKlant().getEmail());
        klant.setWachtwoord(this.getWachtwoord());

        Klant klantDatabase = inloggenInterface.klantExists(klant);

        if (klantDatabase == null) {
            return "nietIngelogd.xhtml";
        } else {
            double totaalPrijs = 0;
            
            
            
            Boeking boeking = new Boeking();
            boeking.setKlant(klantDatabase);
            boeking.setReis(getSessieBasisReisId());
            boeking.setAantalPersonen(getSessieAantalPersonen());
            boeking.setBetaalwijze(this.betaalwijze);
            boeking.setVervoersmiddelVertrek(sessievervoersmiddelen.get(0));
            boeking.setVervoersmiddelTerugkomen(sessievervoersmiddelen.get(1));

            totaalPrijs += getSessieBasisReisId().getPrijsPerPersoon();
            for(Vervoersmiddel v : sessievervoersmiddelen){
                totaalPrijs += v.getPrijs();
            }
            
            boeking.setVastePrijs(totaalPrijs * getSessieAantalPersonen());
              
            boekingInterface.persistReis(boeking);
            return "boekingSucces.xhtml";
        }
    }

    public Date getDatumVanVandaag() {
        return datumVanVandaag;
    }

    public void setDatumVanVandaag(Date datumVanVandaag) {
        this.datumVanVandaag = datumVanVandaag;
    }

    public VervoersmiddelType getVervoersmiddeltype() {
        return vervoersmiddeltype;
    }

    public void setVervoersmiddeltype(VervoersmiddelType vervoersmiddeltype) {
        this.vervoersmiddeltype = vervoersmiddeltype;
    }

    public Land getVertrekplaats() {
        return vertrekplaats;
    }

    public void setVertrekplaats(Land vertrekplaats) {
        this.vertrekplaats = vertrekplaats;
    }

    public Land getBestemming() {
        return Bestemming;
    }

    public void setBestemming(Land Bestemming) {
        this.Bestemming = Bestemming;
    }

    public Date getVertrekdatum() {
        return vertrekdatum;
    }

    public void setVertrekdatum(Date vertrekdatum) {
        this.vertrekdatum = vertrekdatum;
    }

    public Date getEinddatum() {
        return einddatum;
    }

    public void setEinddatum(Date einddatum) {
        this.einddatum = einddatum;
    }

    public int getAantalPersonen() {
        return aantalPersonen;
    }

    public void setAantalPersonen(int aantalPersonen) {
        this.aantalPersonen = aantalPersonen;
    }

    public void ZoekBasisReisByID() {
    }

    public String getWachtwoord() {
        return wachtwoord;
    }

    public void setWachtwoord(String wachtwoord) {
        this.wachtwoord = wachtwoord;
    }

    public List<Betaalwijze> getBetaalwijzen() {
        return boekingInterface.betaalwijzen();
    }
    
}
